class CommonVarRule:
    """通用规则变量"""
    
    # 生日对应的序号
    SHENRI_NO_MAP = {
        "一": 1, "二": 2, "三": 3, "四": 4, "五": 5, "六": 6, "七": 7, "八": 8, "九": 9, "十": 10,
        "初一": 1, "初二": 2, "初三": 3, "初四": 4, "初五": 5, "初六": 6, "初七": 7, "初八": 8, "初九": 9, "初十": 10,
        "十一": 11, "十二": 12, "十三": 13, "十四": 14, "十五": 15, "十六": 16, "十七": 17, "十八": 18, "十九": 19,
        "廿": 20, "廿一": 21, "廿二": 22, "廿三": 23, "廿四": 24, "廿五": 25, "廿六": 26, "廿七": 27, "廿八": 28, "廿九": 29,
        "二十": 20, "二十一": 21, "二十二": 22, "二十三": 23, "二十四": 24, "二十五": 25, "二十六": 26, "二十七": 27, "二十八": 28, "二十九": 29,
        "三十": 30
    }
    
    # 月份关系对应表
    MONTH_No_MAP = {
        "正月": 1, "一月": 1, "二月": 2, "三月": 3, "四月": 4, "五月": 5, "六月": 6, "七月": 7, "八月": 8, "九月": 9,
        "十月": 10, "十一月": 11, "冬月": 11, "十二月": 12, "腊月": 12
    }
    
    # 地支关系对应序号
    DiZhi_No_MAP = {
        "子": 1, "丑": 2, "寅": 3, "卯": 4, "辰": 5, "巳": 6, "午": 7, "未": 8, "申": 9, "酉": 10, "戌": 11, "亥": 12
    }
    
    # 十二宫
    CONST_SHIERGONG = ["命宫", "兄弟", "夫妻", "子女", "财帛", "疾厄", "迁移", "交友", "官禄", "田宅", "福德", "父母"]
    
    # 天干
    CONST_TIANGAN = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
    
    # 地支
    CONST_DIZHI = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
    
    
    # 星系庙旺表
    Xing_light_level = {
        # idx=0 子, idx=1 丑 [子, 丑, 寅, 卯, 辰, 巳, 午, 未, 申, 酉, 戌, 亥]
        "紫微": ["平", "庙", "旺", "旺", "得", "旺", "庙", "庙", "旺", "旺", "得", "旺"],
        "天机": ["庙", "陷", "得", "旺", "利", "平", "庙", "陷", "得", "旺", "利", "平"],
        "太阳": ["陷", "不", "旺", "庙", "旺", "旺", "旺", "得", "得", "陷", "不", "陷"],
        "武曲": ["旺", "庙", "得", "利", "庙", "平", "旺", "庙", "得", "旺", "庙", "平"],
        "天同": ["旺", "不", "利", "平", "平", "庙", "陷", "不", "旺", "平", "平", "庙"],
        "廉贞": ["平", "利", "庙", "平", "利", "陷", "平", "利", "庙", "平", "利", "陷"],
        "天府": ["庙", "庙", "庙", "得", "庙", "得", "旺", "庙", "得", "旺", "庙", "得"],
        "太阴": ["庙", "庙", "旺", "陷", "陷", "陷", "不", "不", "利", "旺", "旺", "庙"],
        "贪狼": ["旺", "庙", "平", "利", "庙", "陷", "旺", "庙", "平", "平", "庙", "陷"],
        "巨门": ["旺", "不", "庙", "庙", "陷", "旺", "旺", "不", "庙", "庙", "陷", "旺"],
        "天相": ["庙", "庙", "庙", "陷", "得", "得", "庙", "得", "庙", "陷", "得", "得"],
        "天梁": ["庙", "旺", "庙", "庙", "庙", "陷", "庙", "旺", "陷", "地", "庙", "陷"],
        "七杀": ["旺", "庙", "庙", "庙", "庙", "平", "旺", "庙", "庙", "庙", "庙", "平"],
        "破军": ["庙", "旺", "得", "陷", "旺", "平", "庙", "旺", "得", "陷", "旺", "平"],
        "左辅": ["旺", "庙", "庙", "陷", "庙", "平", "旺", "庙", "平", "陷", "庙", "平"],
        "右弼": ["庙", "庙", "旺", "陷", "庙", "平", "旺", "庙", "平", "陷", "庙", "平"],
        "文昌": ["得", "庙", "陷", "利", "得", "庙", "陷", "利", "得", "庙", "陷", "利"],
        "文曲": ["得", "庙", "平", "旺", "得", "庙", "陷", "旺", "平", "庙", "陷", "旺"],
        "禄存": ["庙", "旺", "庙", "庙", "旺", "庙", "庙", "庙", "庙", "庙", "旺", "庙"],
        "火星": ["陷", "得", "庙", "利", "陷", "得", "庙", "利", "陷", "陷", "庙", "利"],
        "铃星": ["陷", "陷", "庙", "利", "陷", "得", "庙", "利", "陷", "陷", "庙", "利"],
        "陀罗": ["平", "庙", "陷", "平", "庙", "陷", "平", "庙", "陷", "平", "庙", "陷"],
        "擎羊": ["陷", "庙", "平", "陷", "庙", "平", "平", "庙", "平", "陷", "庙", "平"],
        "地空": ["平", "陷", "陷", "平", "陷", "庙", "庙", "平", "庙", "庙", "陷", "陷"],
        "地劫": ["陷", "陷", "平", "平", "陷", "平", "庙", "平", "庙", "平", "平", "旺"]
    }
    
    @staticmethod
    def DiZhiMoveNext(currDiZhiName: str) -> str:
        """下一个地支名称"""
        if currDiZhiName not in CommonVarRule.DiZhi_No_MAP:
            return ""
        
        idx = CommonVarRule.DiZhi_No_MAP[currDiZhiName] - 1
        if idx < 11:
            return CommonVarRule.CONST_DIZHI[idx + 1]
        else:
            return CommonVarRule.CONST_DIZHI[(idx + 1) % 12]
    
    @staticmethod
    def DiZhiMoveBefore(currDiZhiName: str) -> str:
        """前一个地支名称"""
        if currDiZhiName not in CommonVarRule.DiZhi_No_MAP:
            return ""
        
        idx = CommonVarRule.DiZhi_No_MAP[currDiZhiName] - 1
        if idx == 0:
            return "亥"
        else:
            return CommonVarRule.CONST_DIZHI[idx - 1]